package luanluan.scene 
{
	import flash.utils.Dictionary;
	
	/**
	 * 场景管理类
	 * @author luanluan
	 */
	public class SceneManager 
	{
		private var _curScene:IScene;		//	*当前场景
		
		private var _sceneDic:Dictionary;	//	*场景字典
		
		/**
		 * 进入场景
		 * @param	type
		 * @param	...arg
		 */
		public function enterScene(type:String, ...arg):void
		{
			if (_curScene)
				_curScene.quit();
			var scene:IScene = getScene(type);
			scene.enter.apply(null, arg);
			_curScene = scene;
		}
		
		/**
		 * 注册一个场景,只有注册过的场景才能通过本类管理。
		 * @param	type	场景类别,注册好了之后可以通过类别找到场景
		 * @param	scene	场景对象
		 */
		public function regScene(type:String , scene:IScene):void
		{
			_sceneDic[type] = scene;
		}
		
		/**
		 * 退出当前场景
		 */
		public function quitCurrentScene():void
		{
			if (!_curScene)
				return
			_curScene.quit();
			_curScene = null;
		}
		
		private function getScene(type:String):IScene
		{
			if (!_sceneDic[type])
				throw new Error("未注册的场景类别");
			return _sceneDic[type];
		}
		
		/////////////////////////////////////////////
		/////////////////////////////////////////////
		/////////////////////////////////////////////
		
		public function SceneManager(_single:Single) 
		{
			
			if(_single)
			{
				throw new Error("请用静态方法获取单例的引用!")
			}
		}
		
		private static var _instance:SceneManager = null;
		public static function get instance():SceneManager
		{
			if(_instance == null)
				_instance = new SceneManager(new Single());
			return _instance;
		}
		
	}
	
}
class Single{}